"""
Queue使用，可以用于获取线程计算数据
"""
import threading
import queue
import numpy as np

"""
queue.Queue       # FIFO 即 First in First Out，先进先出
queue.LifoQueue   # LIFO 即 Last in First Out，后进先出，与栈的类似

"""

"""
关于Queue的其他函数

Queue.qsize()                        # 返回队列的大小
Queue.empty()                        # 如果队列为空，返回True,反之False ，在线程间通信的过程中，可以通过此来给消费者等待信息
Queue.full()                         # 如果队列满了，返回True,反之False，给生产者提醒
Queue.get([block[, timeout]])        # 读队列，timeout等待时间
Queue.put(item, [block[, timeout]])  # 写队列，timeout等待时间
Queue.queue.clear()                  # 清空队列

"""

def demo(data):
    result = np.sum(data)
    Q.put(result)  # 将数据压入 Q 中


if __name__ == '__main__':
    Q = queue.Queue(maxsize=5)
    data1 = np.array([1, 2, 3, 4, 5])
    data2 = np.array([4, 5, 6, 7, 8])
    t1 = threading.Thread(target=demo, args=(data1, ))
    t2 = threading.Thread(target=demo, args=(data2, ))
    t1.start()
    t2.start()
    t1.join()
    t2.join()
    print(Q.get())  # 从 Q 中取出数据
    print(Q.get())
